package com.shanyi.common.result;

import lombok.Data;

/**
 * 统一结果出参包装类
 *
 * @author shanyi
 * @date 2024/09/30
 */
@Data
public class ApiResult<T> {
    
    private Boolean success;
    private Integer code;
    private String msg;
    private T data;

    /**
     * 成功的静态方法（无数据）
     * @return {@link ApiResult }<{@link Void }>
     */
    public static ApiResult<Void> success() {
        return success(null);
    }

    /**
     * 成功的静态方法
     * @param data 数据
     * @return {@link ApiResult }<{@link T }>
     */
    public static <T> ApiResult<T> success(T data) {
        ApiResult<T> result = new ApiResult<>();
        result.setSuccess(true);
        result.setCode(200);
        result.setMsg("success");
        result.setData(data);
        return result;
    }

    /**
     * 失败的静态方法（默认返回码500）
     * @param msg 错误信息
     * @return {@link ApiResult }<{@link T }>
     */
    public static <T> ApiResult<T> fail(String msg) {
        return fail(500, msg);
    }

    /**
     * 失败的静态方法
     * @param code 错误码
     * @param msg 错误信息
     * @return {@link ApiResult }<{@link T }>
     */
    public static <T> ApiResult<T> fail(Integer code, String msg) {
        ApiResult<T> result = new ApiResult<>();
        result.setSuccess(false);
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
}
